package class02

import "fmt"

/*
	给定一个有序数组arr，给定一个正数aim
	1）返回累加和为aim的，所有不同二元组
	2）返回累加和为aim的，所有不同三元组
*/

func PrintUniquePair(arr []int, k int) {
	if arr == nil || len(arr) < 2 {
		return
	}
	l := 0
	r := len(arr)-1
	for l < r {
		if arr[l] + arr[r] == k {
			if l == 0 || arr[l] != arr[l-1]{
				fmt.Println(arr[l], arr[r])
			}
			l++
			r--
			//fmt.Println(arr[l], arr[r])
			//for r-1 > l && arr[r] == arr[r-1] {
			//	r--
			//}
			//r--
		} else if arr[l] + arr[r] < k {
			l++
		} else {
			r--
		}
	}
}


func PrintUniqueTriad(arr []int, k int){
	if arr == nil || len(arr) < 3 {
		return
	}
	for i:=0; i<len(arr); i++ {
		PrintUniqueTriadProcess(arr, k-arr[i], i)
	}
}

func PrintUniqueTriadProcess(arr []int, k, firstIndex int){
	l := firstIndex+1
	r := len(arr) - 1
	for l < r {
		if arr [l] + arr[r] == k {
			if l == firstIndex+1 || arr[l] != arr[l-1] {
				fmt.Println(arr[firstIndex], arr[l], arr[r])
			}
			l++
			r--
		} else if arr[l] + arr[r] > k {
			l++
		} else {
			r--
		}
	}
}